from fastapi import APIRouter, UploadFile
import logging

from ..dto.Result import Result
from ..utils.AliOssUtils import AliOssUtils
import uuid

logger = logging.getLogger(__name__)

router = APIRouter(prefix="/upload", tags=["上传文件到阿里云相关接口"])


@router.post("", response_model=Result)
async def upload(image: UploadFile):
    """
    # 上传文件接口

    ## 接口描述
    该接口用于上传文件到阿里云，并返回一个标准化的`Result`对象。

    ## 请求方法
    - **HTTP方法**: POST
    - **路径**: `/upload`

    ## 参数说明
    - **image**:
      - 类型: `UploadFile`
      - 描述: 文件的信息。

    ## 返回值
    - **类型**: [`Result`](file://app/dto/Result.py)
    - **字段说明**:
      - `code`: 状态码，表示请求的结果状态。
      - `msg`: 消息，描述请求的结果。
      - `data`: 返回文件的访问的url。

    ## 示例返回值
    ```json
    {
      "code": 1,
      "msg": "success",
      "data": https://.../xxx.jpg
    }
    """
    logger.info(f"接收到文件: {image.filename}")
    filename = str(uuid.uuid4()) + "." + image.content_type.split("/")[-1]
    putObjectResult = AliOssUtils.uploadFile(filename, await image.read())
    await image.close()
    return Result.success(putObjectResult.resp.response.url)
